home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Celestin Apprentice 7
/
Apprentice-Release7.iso
/
Source Code
/
Pascal
/
Snippets
/
PNL Libraries
/
Libraries
/
SpriteWorld
/
SpriteWorld files
/
Headers
/
Sprite.h
< prev
next >
Wrap
Text File
|
1996-10-29
|
9KB
|
342 lines
///--------------------------------------------------------------------------------------
// Sprite.h
//
// Portions are copyright: c 1991-94 Tony Myles, All rights reserved worldwide.
//
// Description: constants, structures, and prototypes for sprites
///--------------------------------------------------------------------------------------
#ifndef __SPRITE__
#define __SPRITE__
#ifndef __SWCOMMON__
#include "SWCommonHeaders.h"
#endif
#ifndef __SPRITEFRAME__
#include "SpriteFrame.h"
#endif
#if PRAGMA_ALIGN_SUPPORTED
#pragma options align=mac68k
#endif
///--------------------------------------------------------------------------------------
// sprite type definitions
///--------------------------------------------------------------------------------------
typedef struct SpriteRec SpriteRec;
typedef SpriteRec *SpritePtr, **SpriteHdl;
typedef struct RectArray RectArray;
typedef RectArray *RectArrayPtr, **RectArrayHdl;
#ifdef __cplusplus
extern "C" {
#endif
typedef SW_FUNC void (*FrameProcPtr)(
SpritePtr srcSpriteP,
FramePtr curFrameP,
long *frameIndex);
typedef SW_FUNC void (*DrawProcPtr)(
FramePtr srcFrameP,
FramePtr dstFrameP,
Rect *srcRect,
Rect *dstRect);
typedef SW_FUNC void (*MoveProcPtr)(
SpritePtr srcSpriteP);
typedef SW_FUNC void (*CollideProcPtr)(
SpritePtr srcSpriteP,
SpritePtr dstSpriteP,
Rect* sectRect);
typedef enum
{
kSWDontRemoveSprite = 0,
kSWRemoveSprite,
kSWRemoveAndDisposeSprite
} RemovalType;
#ifdef __cplusplus
}
#endif
///--------------------------------------------------------------------------------------
// Rect array data structure
///--------------------------------------------------------------------------------------
struct RectArray
{
short numFrames;
Rect frameRects[];
};
///--------------------------------------------------------------------------------------
// sprite data structure
///--------------------------------------------------------------------------------------
struct SpriteRec
{
SpritePtr nextSpriteP; // next sprite in that layer
SpritePtr prevSpriteP; // previous sprite in that layer
SpritePtr nextActiveSpriteP; // next active sprite in the SpriteWorld
SpritePtr nextIdleSpriteP; // next idle sprite in the SpriteWorld
// drawing fields
Boolean isVisible; // draw the sprite?
Boolean needsToBeDrawn; // sprite has changed, needs to be drawn
Boolean needsToBeErased; // sprite needs to be erased onscreen
Boolean isUnderTiles; // is the sprite behind the tiles?
Rect destFrameRect; // frame destination rectangle
Rect oldFrameRect; // last frame destination rectangle
Rect deltaFrameRect; // union of the sprite's lastRect and curRect
DrawProcPtr frameDrawProc; // callback to draw sprite
// drawing fields for scrolling routines
Rect clippedSourceRect; // source sprite frame rect after clipping
Rect destOffscreenRect; // sprite's dest rect after clipping and offset
Rect oldOffscreenRect; // the destOffscreenRect from the previous frame
Boolean destRectIsVisible; // is destOffscreenRect visible on screen?
Boolean oldRectIsVisible; // was oldOffscreenRect visible on screen?
// frame fields
FramePtr *frameArray; // array of frames
FramePtr curFrameP; // current frame
long numFrames; // number of frames
long maxFrames; // maximum number of frames
long frameTimeInterval; // time interval to advance frame
unsigned long timeOfLastFrameChange; // time (from runningTimeCount) frame was last changed
long frameAdvance; // amount to adjust frame index
long curFrameIndex; // current frame index
long firstFrameIndex; // first frame to advance
long lastFrameIndex; // last frame to advance
FrameProcPtr frameChangeProc; // callback to change frames
// movement fields
long moveTimeInterval; // time interval to move sprite
unsigned long timeOfLastMove; // time (from runningTimeCount) sprite was last moved
short horizMoveDelta; // horizontal movement delta
short vertMoveDelta; // vertical movement delta
Rect moveBoundsRect; // bounds of the sprite's movement
MoveProcPtr spriteMoveProc; // callback to handle movement
// collision detection
CollideProcPtr spriteCollideProc; // callback to handle collisions
// miscellaneous
GWorldPtr sharedPictGWorld; // if common GWorld used for frames, here it is
GWorldPtr sharedMaskGWorld; // same for mask
RemovalType spriteRemoval; // whether to remove sprite, and if so how
long userData; // reserved for user
};
///--------------------------------------------------------------------------------------
// sprite function prototypes
///--------------------------------------------------------------------------------------
#ifdef __cplusplus
extern "C" {
#endif
SW_FUNC OSErr SWCreateSprite(
SpritePtr* newSpriteP,
void* spriteStorageP,
short maxFrames);
SW_FUNC OSErr SWCreateSpriteFromCicnResource(
SpriteWorldPtr destSpriteWorld,
SpritePtr* newSpriteP,
void* spriteStorageP,
short cIconID,
short maxFrames,
MaskType maskType);
SW_FUNC OSErr SWCreateSpriteFromPictResource(
SpriteWorldPtr destSpriteWorld,
SpritePtr* newSpriteP,
void* spriteStorageP,
short pictResID,
short maskResID,
short maxFrames,
MaskType maskType);
SW_FUNC OSErr SWCreateSpriteFromSinglePict(
SpriteWorldPtr destSpriteWorld,
SpritePtr* newSpriteP,
void* spriteStorageP,
short pictResID,
short maskResID,
short frameWidth,
MaskType maskType);
SW_FUNC OSErr SWCreateSpriteFromSinglePictXY(
SpriteWorldPtr destSpriteWorld,
SpritePtr* newSpriteP,
void* spriteStorageP,
short pictResID,
short maskResID,
short frameWidth, short frameHeight,
short borderWidth,
short MaxFrames,
MaskType maskType);
SW_FUNC OSErr SWUpdateSpriteFromPictResource(
SpritePtr theSpriteP,
short pictResID);
SW_FUNC OSErr SWCloneSprite(
SpritePtr cloneSpriteP,
SpritePtr *newSpriteP,
void* spriteStorageP);
SW_FUNC void SWRemoveSpriteFromAnimation(
SpriteWorldPtr spriteWorldP,
SpritePtr spriteP,
Boolean disposeOfSprite);
SW_FUNC void SWDisposeSprite(
SpritePtr oldSpriteP);
SW_FUNC void SWCloseSprite(
SpritePtr deadSpriteP);
SW_FUNC void SWLockSprite(
SpritePtr srcSpriteP);
SW_FUNC void SWUnlockSprite(
SpritePtr srcSpriteP);
SW_FUNC OSErr SWSetSpriteDrawProc(
SpritePtr srcSpriteP,
DrawProcPtr drawProc);
SW_FUNC void SWStdSpriteDrawProc(
FramePtr srcFrameP,
FramePtr dstFrameP,
Rect* srcRect,
Rect* dstRect);
SW_FUNC OSErr SWAddFrame(
SpritePtr srcSpriteP,
FramePtr newFrameP);
SW_FUNC void SWRemoveFrame(
SpritePtr srcSpriteP,
FramePtr oldFrameP);
SW_FUNC void SWSetCurrentFrame(
SpritePtr srcSpriteP,
FramePtr curFrameP);
SW_FUNC void SWSetCurrentFrameIndex(
SpritePtr srcSpriteP,
short frameIndex);
SW_FUNC void SWSetSpriteFrameAdvance(
SpritePtr srcSpriteP,
short frameAdvance);
SW_FUNC void SWSetSpriteFrameRange(
SpritePtr srcSpriteP,
short firstFrameIndex,
short lastFrameIndex);
SW_FUNC void SWSetSpriteFrameTime(
SpritePtr srcSpriteP,
long timeInterval);
SW_FUNC void SWSetSpriteFrameProc(
SpritePtr srcSpriteP,
FrameProcPtr frameProc);
SW_FUNC void SWMoveSprite(
SpritePtr srcSpriteP,
short horizLoc,
short vertLoc);
SW_FUNC void SWOffsetSprite(
SpritePtr srcSpriteP,
short horizOffset,
short vertOffset);
SW_FUNC void SWSetSpriteLocation(
SpritePtr srcSpriteP,
short horizLoc,
short vertLoc);
SW_FUNC void SWSetSpriteMoveBounds(
SpritePtr srcSpriteP,
Rect* moveBoundsRect);
SW_FUNC void SWSetSpriteMoveDelta(
SpritePtr srcSpriteP,
short horizDelta,
short vertDelta);
SW_FUNC void SWSetSpriteMoveTime(
SpritePtr srcSpriteP,
long timeInterval);
SW_FUNC void SWSetSpriteMoveProc(
SpritePtr srcSpriteP, MoveProcPtr moveProc);
SW_FUNC void SWBounceSprite(
SpritePtr srcSpriteP);
SW_FUNC void SWWrapSprite(
SpritePtr srcSpriteP);
SW_FUNC void SWSetSpriteCollideProc(
SpritePtr srcSpriteP,
CollideProcPtr collideProc);
SW_FUNC Boolean SWRegionCollision(
SpritePtr srcSpriteP,
SpritePtr dstSpriteP);
SW_FUNC Boolean SWRadiusCollision(
SpritePtr srcSpriteP,
SpritePtr dstSpriteP);
SW_FUNC Boolean SWPixelCollision(
SpritePtr srcSpriteP,
SpritePtr dstSpriteP);
SW_FUNC void SWSetSpriteVisible(
SpritePtr srcSpriteP,
Boolean isVisible);
SW_FUNC Boolean SWIsSpriteInRect(
SpritePtr srcSpriteP,
Rect* testRect);
SW_FUNC Boolean SWIsSpriteFullyInRect(
SpritePtr srcSpriteP,
Rect* testRect);
SW_FUNC Boolean SWIsPointInSprite(
SpritePtr srcSpriteP,
Point testPoint);
#ifdef __cplusplus
}
#endif
#if PRAGMA_ALIGN_SUPPORTED
#pragma options align=reset
#endif
#endif /* __SPRITE__ */